# -*- coding: utf-8 -*-
"""
@Time    : 2024/8/1 10:15 
@Author  : ZhangShenao 
@File    : 1.获取请求参数query.py 
@Desc    : 获取请求参数query

通过Flask内置的request,可以获取到所有HTTP请求相关的数据
包括请求头Header、请求参数Query、请求体Body等等
"""
from urllib.parse import parse_qs

from flask import Flask, request

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route("/get_query_string", methods=["GET"])
def get_query_string() -> str:
    """
    原始请求参数query_string
    这种方式需要自己解析请求参数,较少使用,通常直接使用request.args
    """

    # request是Flask内置的请求对象,它封装了所有HTTP请求相关的数据,可以直接使用

    # 获取原始的query_string,是二进制格式的bytes
    raw_query_string = request.query_string
    # raw_query_string: b'name=zsa&age=10', type is: <class 'bytes'>
    print(f"raw_query_string: {raw_query_string}, type is: {type(raw_query_string)}")

    # decoded_query_string: {'name': ['zsa'], 'age': ['10']}, type is: <class 'dict'>
    # 可以通过urllib.parse的parse_qs()方法,将原始的query_string进行解码,转换成dict
    decoded_query_string = parse_qs(raw_query_string.decode())
    print(f"decoded_query_string: {decoded_query_string}, type is: {type(decoded_query_string)}")

    return "OK"


@app.route("/get_query_args", methods=["GET"])
def get_query_args() -> str:
    """
    获取query请求参数
    """

    # 通过request.args获取query,类型为ImmutableMultiDict
    query_args = request.args
    print(f"query_args: {query_args}, type is: {type(query_args)}")

    # 获取单个query
    name = query_args.get("name")
    print(f"name = {name}")

    # 获取query列表
    hobbies = query_args.getlist("hobbies")
    print(f"hobbies = {hobbies}")
    return "OK"


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
